// 文件路径: dbms/parser/ast/ForeignKeyNode.java (这是一个新文件)
package com.dbms.parser.ast;

/**
 * ForeignKeyNode (外键节点) 是一个新增的抽象语法树 (AST) 节点，
 * 专门用于表示 `CREATE TABLE` 语句中的 `FOREIGN KEY` 约束定义。
 * 例如：`FOREIGN KEY (student_id) REFERENCES students(id)`
 */
public class ForeignKeyNode extends AstNode {
    /**
     * 源列名，即当前表中作为外键的列 (例如 "student_id")。
     */
    private final String sourceColumn;
    /**
     * 被引用的表名，即外键指向的父表 (例如 "students")。
     */
    private final String referencedTable;
    /**
     * 被引用的列名，即父表中的主键或唯一键 (例如 "id")。
     */
    private final String referencedColumn;

    public ForeignKeyNode(String sourceColumn, String referencedTable, String referencedColumn) {
        this.sourceColumn = sourceColumn;
        this.referencedTable = referencedTable;
        this.referencedColumn = referencedColumn;
    }

    /**
     * 获取源列名。
     * @return 源列名字符串
     */
    public String getSourceColumn() {
        return sourceColumn;
    }

    /**
     * 获取被引用的表名。
     * @return 被引用的表名字符串
     */
    public String getReferencedTable() {
        return referencedTable;
    }

    /**
     * 获取被引用的列名。
     * @return 被引用的列名字符串
     */
    public String getReferencedColumn() {
        return referencedColumn;
    }

    /**
     * 生成该节点的字符串表示，其格式与 SQL 语法一致。
     * @return 描述该外键约束的字符串
     */
    @Override
    public String toString() {
        return "FOREIGN KEY (" + sourceColumn + ") REFERENCES " + referencedTable + "(" + referencedColumn + ")";
    }
}